VPC Peering先からPrivate IP Addressに名前解決できるようになりました
西澤です。先日、VPC Peering先から、Public DNS hostnameをPrivate IP Addressとして名前解決する機能がサポートされるようになった、というリリースがありました。今回のリリースで何ができるようになったのか確認してみたいと思います。
Public DNS hostnameのおさらい
まずは何も設定していない状態で、vpc-a内のec2-a(ip-10-0-0-201)から、vpc-b内のec2-b(ip-10-1-0-51)から、それぞれvpc-a内のEC2インスタンスのPublic DNS hostnameの名前解決を試みます。
ec2-a(ip-10-0-0-201)での名前解決
こちらはプライベートIPアドレスが返されます。Public DNS hostnameは、VPCの中から問い合わせしたときにだけ、Private IPを返す、という特徴がありました。
[ec2-user@ip-10-0-0-201 ~]$ dig ec2-54-67-65-74.us-west-1.compute.amazonaws.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.45.amzn1 <<>> ec2-54-67-65-74.us-west-1.compute.amazonaws.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45846 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;ec2-54-67-65-74.us-west-1.compute.amazonaws.com. IN A ;; ANSWER SECTION: ec2-54-67-65-74.us-west-1.compute.amazonaws.com. 20 IN A 10.0.0.201 ;; Query time: 1 msec ;; SERVER: 10.0.0.2#53(10.0.0.2) ;; WHEN: Fri Aug 5 16:10:19 2016 ;; MSG SIZE rcvd: 81
ec2-b(ip-10-1-0-51)での名前解決
こちらはグローバルIPが返されました。当然ですが、VPC外から問い合わせた場合には、グローバルIPに名前解決されます。
[ec2-user@ip-10-1-0-51 ~]$ dig ec2-54-67-65-74.us-west-1.compute.amazonaws.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.45.amzn1 <<>> ec2-54-67-65-74.us-west-1.compute.amazonaws.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31400 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;ec2-54-67-65-74.us-west-1.compute.amazonaws.com. IN A ;; ANSWER SECTION: ec2-54-67-65-74.us-west-1.compute.amazonaws.com. 20 IN A 54.67.65.74 ;; Query time: 1 msec ;; SERVER: 10.1.0.2#53(10.1.0.2) ;; WHEN: Fri Aug 5 15:58:43 2016 ;; MSG SIZE rcvd: 81
設定手順
それでは、今回リリースされた機能を試してみます。vpc-a(10.0.0.0/16)側で、Peering Connectionsを選択、DNSタブを確認してみます。
デフォルトでは、Disalbed
の状態になっていますので、Actions -> Edit DNS Settingsから変更を行います。
"Allow DNS resolution from peer VPC to private IP"にチェックを入れて、Save
をクリックすれば設定完了です。
動作確認
この許可設定をすることで、vpc-a(10.0.0.0/16)内にあるリソースのPublic DNS hostnameを、VPC Peering先のvpc-b(10.1.0.0/16)からもPrivateなIP Addressに名前解決することができるようになります。確認してみましょう。
[ec2-user@ip-10-1-0-51 ~]$ dig ec2-54-67-65-74.us-west-1.compute.amazonaws.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.45.amzn1 <<>> ec2-54-67-65-74.us-west-1.compute.amazonaws.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18912 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;ec2-54-67-65-74.us-west-1.compute.amazonaws.com. IN A ;; ANSWER SECTION: ec2-54-67-65-74.us-west-1.compute.amazonaws.com. 20 IN A 10.0.0.201 ;; Query time: 1 msec ;; SERVER: 10.1.0.2#53(10.1.0.2) ;; WHEN: Fri Aug 5 16:06:22 2016 ;; MSG SIZE rcvd: 81
設定前のec2-b(ip-10-1-0-51)での名前解決とは挙動が異なることが確認できました。ちなみにこの機能はクロスアカウントでの利用も可能です。
どんなケースで嬉しいのか?
EC2のPublic DNS hostnameを使わなければいけないケースは少ないですよね。実際のユースケースで嬉しいのは、Public AccessibleになっているRDS、RedshiftのEndpointに対して、VPC内からのみPrivate IPでアクセスしたいケースです。この件については、甲木さんが詳しく記事を書かれていますので、ぜひご覧ください。
まとめ
このリリースを読んでも、VPCに詳しい方でないとすぐに内容を理解することは難しいと思いましたので、実際の設定手順を含めてまとめてみました。Security Groupも相互参照が可能に(下記記事)なりましたし、VPC Peeringを活用できるケースがさらに広がりましたね。
どこかの誰かのお役に立てば嬉しいです。